iT邦幫忙

2022 iThome 鐵人賽

DAY 27
0
Mobile Development

Android studio 30天初學筆記系列 第 27

[Android Studio 30天挑戰] Day27 - 介紹Dagger(上)

  • 分享至 

  • xImage
  •  

今天要介紹的是Dagger2,這是一個非常實用的套件,現在不管是什麼的專案一定都會用到。而Dagger2的好處有很多,它能讓程式碼非常的簡潔,最重要的是讓往後在維護上能夠更輕鬆更好理解內容。接下來就來看看Dagger2要使用到的工具!!/images/emoticon/emoticon07.gif

差別

使用Dagger2可以簡化編寫的程式碼和不用每次要用時都要new出來,所以每次執行時都會耗費過多記憶體。

沒有使用Dagger2

在沒有使用前我們要使用其他class的方法時都要使用new。

Student student = new student();

使用Dagger2

    @Inject
    Student2 student2;

依賴

一樣的要先去build.gradle:

    implementation 'com.google.dagger:dagger:2.16'
    annotationProcessor 'com.google.dagger:dagger-compiler:2.16'

常使用的註解

  1. @Inject : 被標註的會提供依賴注入。
  2. @Component : 能作為你 Module 和你需要注入的地方作為橋樑。
  3. @Module : 能標註你要當作Module的class。
  4. @Provide : 能標注在你要提供依賴的function上。

Student

這裡是你所要提供依賴的Class,而這裡要提供Name。

public class Student {
    private String name;
    //你所要提供的function。
    @Inject
    public Student(String name){
        this.name=name;
    }
    //get方法
    public String getName(){
        return name;
    }
    //set方法
    public void setName(String name){
        this.name=name;
    }
}

Component

這裡是讓你的Module和你要注入的地方可以溝通,像是橋樑一樣。

//你這個頁面所需的主件(Module)
@Component(modules = Module.class)
public interface Component {
    //你所要注入的地方
    void inject(MainActivity MainActivity);
}

Module

提供需要依賴的對象實例化。

@Module
public class Module {
    private String name;
    //建構值
    public Module(String name){
        this.name=name;
    }
    //你所要提供的依賴,通常會在前面加上provides。
    @Provides
    Student2 providesStudent2(){
        return  new Student2(name);
    }
}

MainActivity

下面這行是當你其他的東西建立完後,從新bulid過專案就會自動生成

//-----------------------你所要使用的Module和他的建構值------注入到這個頁面(this)
DaggerComponent.builder().Module(new Module("Lee")).build().inject(this);
public class MainActivity extends AppCompatActivity {
    //注入要使用的依賴
    @Inject
    Student student;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //綁定元件
        TextView tv=(TextView) findViewById(R.id.textView);
        //建立DaggerComponent
        DaggerComponent.builder().Module(new Module("Lee")).build().inject(this);
        //呼叫getName方法拿取資料
        tv.setText(student.getName());
    }
}

上一篇
[Android Studio 30天挑戰] Day26 - 介紹DataBinding
下一篇
[Android Studio 30天挑戰] Day28 - 介紹Dagger(下)
系列文
Android studio 30天初學筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言